package main

import (
	"fmt"
	"math/rand"
	"slices"
)

// 3、数字重复统计
// 随机产生100个整数
// 数字的范围[-100, 100]
// 降序输出这些生成的数字并打印其重复的次数

func main() {
	// 用map来纪录随机产生的数字出现的次数
	m := make(map[int]int, 201) // 为map配置长度为最大的长度范围-100~100，最大201=100+100+1 (0的情况)
	//fmt.Println(m)

	for i := 0; i < 100; i++ {
		r := rand.Intn(200) - 100 //产生随机整数200以内，再平移-100，以得到-100~100范围的值
		//fmt.Println(r)
		m[r]++ // 每出现一次就加1

	}

	// for i, v := range m {
	// 	if v > 0 {
	// 		fmt.Println(i, v) // 印出map来确认下，key是无序的
	// 	}
	// }
	keys := make([]int, 0, len(m)) // 用make产生长度为m的keys切片
	for k := range m {
		//fmt.Printf("Key=%d\n", k)
		keys = append(keys, k)
	}
	//fmt.Println(keys)
	//sort.Ints(keys) // 针对keys切片排序，缺省是升序
	//fmt.Println(keys)
	slices.Sort(keys)
	//fmt.Println(keys)
	slices.Reverse(keys) // 将顺序掉换，以实现降序排序
	for _, v := range keys {
		fmt.Println(v, "=>", m[v]) // 针对已排序的keys取出map的值，打印出来
	}

}
